<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象的浅拷贝</title>
</head>
<body>

    <script>
        // js中有赋值 = 一：值传递   二：地址传递
        //  一：值传递   基本数据类型 赋值  number string boolean undefined null  Symbol bigInt
        let  a = 100;
        b=a;
        b= false;
        console.log(a);
        console.log(b);
        

        // 二：地址传递  object  array  指针 内存首地址

        let obj1 ={
            name:"king",
            money:10000000000000,
            car:"玛莎拉蒂",
            show(){
                console.log(this.name);
            }
        }
        let obj2 = {}
        // obj2 = obj1

        // obj2.name="tom"

        // console.log(obj1);
        // console.log(obj2);


         // 浅拷贝：把对象的第一层属性或方法拷贝给一个新的对象，开发中我们经常需要复制一个对象如果直接赋值，则复制的是地址，修改任何一个对象，另一个对象都会变化
        // 1: 浅拷贝方法  Object.assign(obj2,obj1)
        // obj2 = Object.assign(obj2,obj1)
        // console.log(obj1);
        // console.log(obj2);
        

        //  2: 浅拷贝方法  展开运算符
                // obj2 = {...obj1}
                // console.log(obj1);
                // console.log(obj2);

         // 3： 循环obj1 在循环体赋值  封装成函数
                for (const key in obj1) {
                    obj2[key] = obj1[key]
                }

                console.log(obj1);
                console.log(obj2);


    </script>
    
</body>
</html>